package com.example.service;

import com.example.common.Result;
import com.example.common.ServiceCode;
import com.example.common.ServiceException;
import com.example.dao.TypeInfoDao;
import com.example.dto.TypePageDTO;
import com.example.entity.UserInfo;
import org.apache.commons.math3.stat.descriptive.summary.Product;
import org.springframework.stereotype.Service;
import com.example.entity.TypeInfo;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import tk.mybatis.mapper.entity.Example;

import javax.annotation.Resource;
import java.util.List;

@Service
public class TypeInfoService {

    @Resource
    private TypeInfoDao typeInfoDao;

    public TypeInfo add(TypeInfo typeInfo) {
        typeInfoDao.insertSelective(typeInfo);
        return typeInfo;
    }

    public void delete(Long id) {
        typeInfoDao.deleteByPrimaryKey(id);
    }

    public void update(TypeInfo typeInfo) {
        typeInfoDao.updateByPrimaryKeySelective(typeInfo);
    }

    public TypeInfo findById(Long id) {
        TypeInfo typeInfo = typeInfoDao.selectByPrimaryKey(id);
        if (typeInfo == null){
            throw new ServiceException(ServiceCode.ERR_EXISTS,"菜品种类不存在");
        }
        return typeInfo;
    }

    public List<TypeInfo> findAll() {
        return typeInfoDao.selectAll();
    }

//    public PageInfo<TypeInfo> findPage(Integer pageNum, Integer pageSize, String name) {
//        PageHelper.startPage(pageNum, pageSize);
//        List<TypeInfo> all = typeInfoDao.findByName(name);
//        return PageInfo.of(all);
//    }

    /**
     * 分页查询所有
     * @param pageNum
     * @param pageSize
     * @return
     */
    public PageInfo<TypeInfo> findPage(Integer pageNum, Integer pageSize) {
        PageHelper.startPage(pageNum, pageSize);
        List<TypeInfo> all = typeInfoDao.selectAll();
        return PageInfo.of(all);
    }

    /**
     * 模糊查询（分页）
     * @param pageNum
     * @param pageSize
     * @param name
     * @param description
     * @return
     */
    public PageInfo<TypeInfo> queryByNameOrDescriptionPage(Integer pageNum, Integer pageSize, String name, String description) {
        // 开始分页
        PageHelper.startPage(pageNum, pageSize);

        // 构建查询条件
        Example example = new Example(TypeInfo.class);
        Example.Criteria criteria = example.createCriteria();
        if (name != null && !name.isEmpty()) {
            criteria.andLike("name", "%" + name + "%");
        }
        if (description != null && !description.isEmpty()) {
            criteria.andLike("description", "%" + description + "%");
        }

        // 查询
        List<TypeInfo> all = typeInfoDao.selectByExample(example);

        // 返回分页结果
        return new PageInfo<>(all);
    }

    /**
     * PageHelper获取菜品种类（分页）
     * @param typePageDTO
     * @return
     */
    public PageInfo<TypeInfo> getByPage(TypePageDTO typePageDTO) {
        Integer pageIndex = typePageDTO.getPageIndex();
        Integer pageSize = typePageDTO.getPageSize();
        // 开始分页
        PageHelper.startPage(pageIndex, pageSize);
        List<TypeInfo> typeInfos= this.typeInfoDao.getByPage(typePageDTO.getName(), typePageDTO.getDescription());
        //分页封装
        PageInfo<TypeInfo> pageInfo = new PageInfo<>(typeInfos);

        // 检查请求的页码是否超出范围
        if (pageIndex <= 0 || pageIndex > pageInfo.getPages()) {
            throw new ServiceException(ServiceCode.ERR_CONFLICT, "页码超出范围");
        }
        return pageInfo;
    }
}
